package com.sctvcloud.dongqu.ui.utils;

import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.widget.ImageView;

import com.bumptech.glide.BitmapTypeRequest;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.ruihang.generalibrary.utils.UrlUtils;
import com.sctvcloud.dongqu.R;
import com.sctvcloud.dongqu.application.Constances;

import java.io.File;

/**
 * Created by Ly on 2016/12/2.
 */
public class GlideUtil {

	public static DrawableTypeRequest<String> getGlid(@NonNull Context context, @NonNull String url) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url));
	}
	public static DrawableTypeRequest<File> getGlid(@NonNull Context context, @NonNull File file) {
		return Glide.with(context).load(file);
	}
	public static DrawableTypeRequest<String> getDynamicGlid(@NonNull Context context, @NonNull String url) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.DY_BASE_URL, url));
	}

	public static BitmapTypeRequest<String> getGlidAsBitmap(@NonNull Context context, @NonNull String url) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).asBitmap();
	}

	public static BitmapTypeRequest<String> getDynamicGlidAsBitmap(@NonNull Context context, @NonNull String url) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.DY_BASE_URL, url)).asBitmap();
	}

	public static DrawableRequestBuilder<String> getGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).skipMemoryCache(isSkipCache);
	}

	public static DrawableRequestBuilder<String> getDynamicGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
		return Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).skipMemoryCache(isSkipCache).diskCacheStrategy(DiskCacheStrategy.NONE).error(R.mipmap.icon_circle_avatar);
	}

	public static DrawableRequestBuilder<String> getAvatarGlid(@NonNull Context context, @NonNull String url, boolean isSkipCache) {
		return getDynamicGlid(context, url, true).transform(new GlideCircleTransform(context))
				.diskCacheStrategy(DiskCacheStrategy.NONE) ;
	}
	/**
	 * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<String> getGlideWithLarge169DefENotFit(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).error(R.mipmap.icon_def_16_9_l);
	}

	/**
	 * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<String> getGlideWithLarge169DefNotFit(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).placeholder(R.mipmap.icon_def_16_9_l).error(R.mipmap.icon_def_16_9_l);
	}

	/**
	 * 加载16:9的大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithLarge169Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_l).error(R.mipmap.icon_def_16_9_l);
	}

	/**
	 * 加载16:9的中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithMid169Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_m).error(R.mipmap.icon_def_16_9_m);
	}

	/**
	 * 加载16:9的中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithMid169DefNoFit(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).placeholder(R.mipmap.icon_def_16_9_m).error(R.mipmap.icon_def_16_9_m);
	}

	/**
	 * 加载16:9的小图片,默认或出错使用{icon_def_16_9_s}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithSmall169Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_16_9_s).error(R.mipmap.icon_def_16_9_s);
	}

	/**
	 * 加载8:3的图片,默认或出错使用{icon_def_8_3}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith83Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_8_3).error(R.mipmap.icon_def_8_3);
	}

	/**
	 * 加载3:4的图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith34Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.icon_def_3_4).error(R.mipmap.icon_def_3_4);
	}

	/**
	 * 加载3:4的图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith34DefNormal(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).placeholder(R.mipmap.icon_def_3_4).error(R.mipmap.icon_def_3_4);
	}

	/**
	 * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith11DefNoFit(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).placeholder(R.mipmap.icon_def_1_1).error(R.mipmap.icon_def_1_1);
	}


	/**
	 *
	 *未成功加载预览图的时候，背景采用亮黑色，以分辨出加载动画
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithBlackBg(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.drawable.bg_black_dim).error(R.drawable.bg_black_dim);
	}



	/**
	 * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith11Def(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).centerCrop().placeholder(R.mipmap.icon_def_1_1).error(R.mipmap.icon_def_1_1);
	}

	/**
	 * 1:1  圆形图
	 * @param context
	 * @param url
	 * @return
	 */
	public static DrawableRequestBuilder<?> getGlideWith11CircleCenterCrop(@NonNull Context context, @NonNull String url) {
		return  Glide.with(context).load(UrlUtils.linkUrls(Constances.ST_BASE_URL, url)).centerCrop().transform(new GlideCircleTransform(context))
				.skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).error(R.mipmap.icon_def_1_1);
	}

	/**
	 * 加载1:1的图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWith11DefTopImg(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher);
	}
	/**
	 * 加载头像图片,默认或出错使用{icon_circle_avatar}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 */
	public static DrawableRequestBuilder<?> getGlideWithAvatorDef(@NonNull Context context, @NonNull String url) {
		return getGlid(context, url).fitCenter().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).placeholder(R.mipmap.icon_circle_avatar).error(R.mipmap.icon_circle_avatar);
	}

	/**
	 * 加载8:3图片,默认或出错使用{icon_def_8_3}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgWith83Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWith83Def(context, url).into(imageView);
	}

	/**
	 * 加载3:4图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgWith34Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWith34Def(context, url).into(imageView);
	}
    /**
     * 加载3:4图片,默认或出错使用{icon_def_3_4}，使用此方法前请判断非空
     *
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWith34DefNormal(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
        if (context instanceof Activity){
            if (((Activity)context).isDestroyed()){
                return;
            }
        }
        getGlideWith34DefNormal(context, url).into(imageView);
    }

	/**
	 * 加载1:1图片,默认或出错使用{icon_def_1_1}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgWith11Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWith11Def(context, url).into(imageView);
	}
	/**
	 * 加载1:1图片,默认或出错使用{ic_launcher}，使用此方法前请判断非空
	 * 用于市州切换标题图标加载
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgWith11DefTopImg(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWith11DefTopImg(context, url).into(imageView);
	}
	/**
	 * 加载16:9大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgLarge169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWithLarge169Def(context, url).into(imageView);
	}

	/**
	 * 加载16:9大图片,默认或出错使用{icon_def_16_9_l}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgLarge169DefNotFit(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWithLarge169DefNotFit(context, url).dontTransform().into(imageView);
	}

	/**
	 * 加载16:9中图片,默认或出错使用{icon_def_16_9_m}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgMid169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWithMid169Def(context, url).into(imageView);
	}

	/**
	 * 加载16:9小图片,默认或出错使用{icon_def_16_9_s}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadImgSmall169Def(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWithSmall169Def(context, url).into(imageView);
	}

	/**
	 * 加载头像图片,默认或出错使用{icon_circle_avatar}，使用此方法前请判断非空
	 *
	 * @param context
	 * @param url
	 * @param imageView
	 */
	public static void loadAvatorDef(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
		if (context instanceof Activity){
			if (((Activity)context).isDestroyed()){
				return;
			}
		}
		getGlideWithAvatorDef(context, url).into(imageView);
	}
}
